﻿#pragma once
#include <string>
#include "FrameData.h"
#include "MarketDataStream.h"
namespace KGen
{
	//// 新产生的K线回调
	//class KItemCallBack
	//{
	//public:
	//	KItemCallBack();
	//	// 设置工作目录
	//	//void SetWorkSpace(const std::string &pworkSpace) ;
	//	// 更新K线的回调，更新之后接着返回
	//	virtual void UpdateKItem(const std::string &pSymbol, const time_t &pMarketTime, MData::KLineItem &ioKItem);
	//	// 保存K线的回调
	//	virtual void SaveKItem(const std::string &pSymbol, const MData::KLineItem &pKItem);
	//	// 保存临时K线的回调
	//	virtual void SaveTmpKItem(const std::string &pSymbol, const MData::KLineItem &pKItem);
	//protected:
	//	MDIO::KItem m_kItemStream;
	//	MDIO::TMPKItem m_tmpKStream;
	//};
	class KItemGenerator
	{
	public:
		KItemGenerator();
		//void InitItem(const std::string &pSymbolName);
		// 重新设置工作目录
		//void SetWorkSpace(const std::string &pWorkspace) { m_workSpace = pWorkspace; }
		//************************************
		// Method:    接收新的行情
		// Parameter: const MData::PriceItem & pItem 行情
		// Parameter: MData::KLineItem & outframKItem 帧行情
		//************************************
		void PushNewPrice(const MData::PriceItem &pItem, MData::KLineItem &lastKItem);
		// 返回最新的K线
		const MData::KLineItem &GetLastKItem() { return m_kItem; }
		// 清空K线生成
		void ClearKItem();
	private:
		// 初始化KItem
		void initKItem(const MData::PriceItem &pItem);
		// 初始化临时K线 并返回是否将临时临时K线保存到K线磁盘中了
		bool initTempKItem(const time_t &pMarketTime);
		// 计算时间范围
		void getKItemRange(time_t pUpdateTime, time_t &outKItemBegin, time_t &outKItemEnd);
		//// 更新最后的K线
		//inline void updateLastSaveKItem(const time_t &pMarketTime, MData::KLineItem &ioKItem);
		//// 保存新K线
		//inline void saveLastKItem(const MData::KLineItem &pKItem);
		//// 更新临时K线
		//inline void updateTmpKItem(const MData::KLineItem &pKItem);

		MData::KLineItem m_kItem; // 这里面包含了初始化时的时分秒
		time_t m_kItemStartTime; // K线的起始时间
		time_t m_kItemEndTime; // K线的结束时间
		//std::string m_workSpace; // 工作目录
		// 保存合约名称
		//std::string m_symbolName;
		// 新产生K线的回调
		//NewKItemCallBack *m_genKItemCallback;
		// 记录是否保存过行情时间段的第一根K线了
		//bool m_hasSaveSegmentBeginKItem;

		// K线回调
		//KItemCallBack *m_kitemCallback;
	};

}